define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        index: function () {
            // 动态引入通用脚本
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/index.js';
            document.head.appendChild(script);

            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'article/article/index',
                    add_url: 'article/article/add',
                    edit_url: 'article/article/edit',
                    multi_url: 'article/article/multi',
                    del_url: 'article/article/del',
                    dragsort_url: 'ajax/weigh',
                    table: 'fa_article',
                }
            });

            var table = $("#table");

            // 初始化表格  a
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                escape: false,
                pk: 'id',
                sortName: 'id',
                sortOrder: 'desc',
                // 添加拖拽排序配置
                showDraggable: true,
                draggable: true,
                columns: [
                    [
                        { checkbox: true },
                        { field: 'id', title: __('Id'), sortable: true },
                        { field: 'city_id', title: '城市', sortable: true },
                        { field: 'school_id', title: '学校', sortable: true },
                        { field: 'column_id', title: '栏目', sortable: true },
                        { field: 'title', title: '标题', sortable: true ,align:'left'},
                        { field: 'create_time', title: '发布时间', formatter: Table.api.formatter.datetime, sortable: true },
                        { field: 'status', title: '状态', formatter: Controller.api.formatter.status, events: Controller.api.events.status },
                        {
                            field: 'operate',
                            title: __('Operate'),
                            table: table,
                            events: Table.api.events.operate,
                            formatter: Table.api.formatter.operate,
                            buttons: [
                                {
                                    name: 'edit',
                                    title: __('Edit'),
                                    icon: 'fa fa-pencil',
                                    classname: 'btn btn-xs btn-success btn-editone btn-dialog',
                                    url: 'article/article/edit',
                                    extend: 'data-area=["80%","80%"] data-title="编辑文章"'
                                },
                                {
                                    name: 'del',
                                    title: __('Del'),
                                    icon: 'fa fa-trash',
                                    classname: 'btn btn-xs btn-danger btn-delone',
                                    url: 'article/article/del',
                                    confirm: '确认要删除这篇文章吗？删除后无法恢复！',
                                    success: function(data, ret) {
                                        Layer.msg(ret.msg, {time: 1000}, function() {
                                            $(".btn-refresh").trigger("click");
                                        });
                                    },
                                    error: function(data, ret) {
                                        Layer.msg(ret.msg, {time: 3000});
                                        return false;
                                    }
                                },
                                {
                                    name: 'add',
                                    title: __('Add'),
                                    icon: 'fa fa-plus',
                                    classname: 'btn btn-xs btn-success btn-addone btn-dialog',
                                    url: 'article/article/add',
                                    extend: 'data-area=["80%","80%"] data-title="添加文章"'
                                }
                            ]
                        }
                    ]
                ]
            });
            
            // 绑定筛选按钮事件
            $('#btn-filter').on('click', function() {
                var cityId = $('#c-cityarea_id').val();
                var schoolId = $('#c-school_id').val();
                
                var queryParams = table.bootstrapTable('getOptions').queryParams;
                table.bootstrapTable('refresh', {
                    query: {
                        city_id: cityId,
                        school_id: schoolId
                    }
                });
            });
            
            // 绑定重置按钮事件
            $('#btn-reset-filter').on('click', function() {
                $('#c-cityarea_id').val('').trigger('change');
                $('#c-school_id').val('').trigger('change');
                table.bootstrapTable('refresh', {
                    query: {}
                });
            });

            Table.api.bindevent(table);
            Controller.api.bindevent();
        },
        add: function () {

            $(document).on("change change2", "#c-column_id", function (e) {
                var $column = $(this);
                var id = '';
                id =  $('#c-column_id').val();
                var text=$('#c-column_id>option:selected').text();
                if (text == '师资队伍') {
                    $('#teacher-name-group').show();
                    $('#teacher-name-group').css("display", "block");
                    $('#c-name').attr('data-rule', 'required');
                } else {
                    $('#teacher-name-group').hide();
                    $('#c-name').attr('data-rule', '');
                }
            });


            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js?';
            document.head.appendChild(script);
            Controller.api.bindevent();
        },
        edit: function () {

            $(document).on("change change2", "#c-column_id", function (e) {
                var $column = $(this);
                var id = '';
                id =  $('#c-column_id').val();
                var text=$('#c-column_id>option:selected').text();
                if (text == '师资队伍') {
                    $('#teacher-name-group').show();
                    $('#teacher-name-group').css("display", "block");
                    $('#c-name').attr('data-rule', 'required');
                } else {
                    $('#teacher-name-group').hide();
                    $('#c-name').attr('data-rule', '');
                }
            });

            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js?';
            document.head.appendChild(script);
            Controller.api.bindevent();
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
                // 初始化自定义下拉组件
                Controller.api.initCustomSelects();
                // 初始化地点和班级全选功能
                Controller.api.initSelectAllButtons();
                // 初始化抓取网址功能
                Controller.api.initCollectContent();
                // 初始化AI生成内容功能
                Controller.api.initAIContentGeneration();
            },

            // 初始化自定义下拉组件
            initCustomSelects: function () {
                $('.hover-expand-select').each(function () {
                    var $originalSelect = $(this);
                    var selectId = $originalSelect.attr('id');
                    var selectName = $originalSelect.attr('name');
                    var isMultiple = $originalSelect.attr('multiple') !== undefined;

                    // 创建自定义下拉组件的HTML结构
                    var customSelectHtml = '<div class="custom-select-container" data-original-id="' + selectId + '">' +
                        '<div class="custom-select-display" data-placeholder="请选择..."></div>' +
                        '<div class="custom-select-options"></div>' +
                        '</div>';

                    // 在原始 select 元素后面插入自定义组件
                    $originalSelect.after(customSelectHtml);

                    var $customContainer = $originalSelect.next('.custom-select-container');
                    var $display = $customContainer.find('.custom-select-display');
                    var $options = $customContainer.find('.custom-select-options');

                    // 初始化显示文本
                    Controller.api.updateCustomSelectDisplay($customContainer, $originalSelect, isMultiple);

                    // 绑定点击事件
                    $display.on('click', function (e) {
                        e.stopPropagation();
                        Controller.api.toggleCustomSelect($customContainer, $originalSelect);
                    });

                    // 绑定悬停事件
                    $customContainer.on('mouseenter', function () {
                        if (!$options.hasClass('expanded')) {
                            Controller.api.expandCustomSelect($customContainer, $originalSelect);
                        }
                    });

                    $customContainer.on('mouseleave', function () {
                        if ($options.hasClass('expanded')) {
                            Controller.api.collapseCustomSelect($customContainer);
                        }
                    });
                });

                // 点击文档其他地方关闭所有下拉框
                $(document).on('click', function () {
                    $('.custom-select-options.expanded').each(function () {
                        Controller.api.collapseCustomSelect($(this).parent());
                    });
                });

                console.log('自定义下拉组件初始化完成，处理了', $('.hover-expand-select').length, '个元素');
            },

            // 初始化地点和班级全选按钮
            initSelectAllButtons: function () {
                // 地点全选按钮
                $(document).on('click', '#select-all-ocation', function() {
                    $('#c-ocation_class option').prop('selected', true);
                    $('#c-ocation_class').trigger('change');
                    if (typeof Layer !== 'undefined') {
                        Layer.msg('已全选所有地点', {icon: 1, time: 1000});
                    } else if (typeof layer !== 'undefined') {
                        layer.msg('已全选所有地点', {icon: 1, time: 1000});
                    }
                });
                
                // 地点全不选按钮
                $(document).on('click', '#unselect-all-ocation', function() {
                    $('#c-ocation_class option').prop('selected', false);
                    $('#c-ocation_class').trigger('change');
                    if (typeof Layer !== 'undefined') {
                        Layer.msg('已取消选择所有地点', {icon: 1, time: 1000});
                    } else if (typeof layer !== 'undefined') {
                        layer.msg('已取消选择所有地点', {icon: 1, time: 1000});
                    }
                });
                
                // 班级全选按钮
                $(document).on('click', '#select-all-classes', function() {
                    $('#c-classes_id option').prop('selected', true);
                    $('#c-classes_id').trigger('change');
                    if (typeof Layer !== 'undefined') {
                        Layer.msg('已全选所有班级', {icon: 1, time: 1000});
                    } else if (typeof layer !== 'undefined') {
                        layer.msg('已全选所有班级', {icon: 1, time: 1000});
                    }
                });
                
                // 班级全不选按钮
                $(document).on('click', '#unselect-all-classes', function() {
                    $('#c-classes_id option').prop('selected', false);
                    $('#c-classes_id').trigger('change');
                    if (typeof Layer !== 'undefined') {
                        Layer.msg('已取消选择所有班级', {icon: 1, time: 1000});
                    } else if (typeof layer !== 'undefined') {
                        layer.msg('已取消选择所有班级', {icon: 1, time: 1000});
                    }
                });
            },

            // 展开自定义下拉框
            expandCustomSelect: function ($container, $originalSelect) {
                var $display = $container.find('.custom-select-display');
                var $options = $container.find('.custom-select-options');

                // 生成选项列表
                Controller.api.generateCustomSelectOptions($container, $originalSelect);

                // 添加展开样式
                $display.addClass('expanded');
                $options.addClass('expanded');

                // 计算实际内容高度
                var optionCount = $originalSelect.find('option').length;
                // 修改高度计算逻辑，确保高度按内容最大值显示
                var contentHeight = optionCount * 32 + 10; // 每个选项约32px高度
                contentHeight = Math.max(contentHeight, 200); // 最小200px，确保与CSS中定义的min-height一致

                $options.css('max-height', contentHeight + 'px');

                console.log('展开下拉框:', $originalSelect.attr('id'), '选项数:', optionCount, '高度:', contentHeight + 'px');
            },

            // 收缩自定义下拉框
            collapseCustomSelect: function ($container) {
                var $display = $container.find('.custom-select-display');
                var $options = $container.find('.custom-select-options');

                $display.removeClass('expanded');
                $options.removeClass('expanded');
                $options.css('max-height', '0');
            },

            // 切换下拉框状态
            toggleCustomSelect: function ($container, $originalSelect) {
                var $options = $container.find('.custom-select-options');

                if ($options.hasClass('expanded')) {
                    Controller.api.collapseCustomSelect($container);
                } else {
                    Controller.api.expandCustomSelect($container, $originalSelect);
                }
            },

            // 生成选项列表
            generateCustomSelectOptions: function ($container, $originalSelect) {
                var $options = $container.find('.custom-select-options');
                var isMultiple = $originalSelect.attr('multiple') !== undefined;

                $options.empty();

                // 如果是多选模式，添加全选/全不选控制按钮
                if (isMultiple) {
                    var $controls = $('<div class="custom-select-controls">' +
                        '<span class="custom-select-control-btn" data-action="select-all">全选</span>' +
                        '<span class="custom-select-control-btn" data-action="select-none">全不选</span>' +
                        '</div>');

                    // 绑定全选/全不选事件
                    $controls.find('.custom-select-control-btn').on('click', function (e) {
                        e.stopPropagation();
                        var action = $(this).data('action');
                        Controller.api.handleSelectAllNone($container, $originalSelect, action);
                    });

                    $options.append($controls);
                }

                $originalSelect.find('option').each(function () {
                    var $option = $(this);
                    var value = $option.val();
                    var text = $option.text();
                    var isSelected = $option.is(':selected');
                    var selectId = $originalSelect.attr('id');

                    // 判断是否为地点选择框，且需要检查层级
                    var isLocationSelect = (selectId === 'c-ocation_class');
                    var isSelectableOption = true;

                    if (isLocationSelect) {
                        // 地点选择框的层级判断逻辑
                        isSelectableOption = Controller.api.isSelectableLocationOption($option, text);
                    }

                    var $customOption = $('<div class="custom-select-option" data-value="' + value + '">' + text + '</div>');

                    if (!isSelectableOption) {
                        // 不可选择的选项（上级分类）
                        $customOption.addClass('option-disabled');
                        $customOption.css({
                            'color': '#6c757d',
                            'background-color': '#f8f9fa',
                            'cursor': 'not-allowed',
                            'font-weight': 'bold'
                        });
                    } else {
                        // 可选择的选项
                        if (isSelected) {
                            $customOption.addClass('selected');
                        }

                        // 绑定点击事件
                        $customOption.on('click', function (e) {
                            e.stopPropagation();
                            Controller.api.selectCustomOption($container, $originalSelect, $(this), isMultiple);
                        });
                    }

                    $options.append($customOption);
                });
            },

            // 选择选项
            selectCustomOption: function ($container, $originalSelect, $clickedOption, isMultiple) {
                var value = $clickedOption.data('value');

                if (isMultiple) {
                    // 多选模式
                    var $originalOption = $originalSelect.find('option[value="' + value + '"]');
                    var isCurrentlySelected = $originalOption.is(':selected');

                    $originalOption.prop('selected', !isCurrentlySelected);
                    $clickedOption.toggleClass('selected');
                } else {
                    // 单选模式
                    $originalSelect.val(value);
                    $container.find('.custom-select-option').removeClass('selected');
                    $clickedOption.addClass('selected');

                    // 单选后自动关闭
                    Controller.api.collapseCustomSelect($container);
                }

                // 更新显示文本
                Controller.api.updateCustomSelectDisplay($container, $originalSelect, isMultiple);

                // 触发 change 事件
                $originalSelect.trigger('change');
            },

            // 更新显示文本
            updateCustomSelectDisplay: function ($container, $originalSelect, isMultiple) {
                var $display = $container.find('.custom-select-display');
                var placeholder = $display.data('placeholder') || '请选择...';

                var selectedOptions = $originalSelect.find('option:selected');

                if (selectedOptions.length === 0) {
                    $display.text(placeholder);
                } else if (isMultiple) {
                    var texts = [];
                    selectedOptions.each(function () {
                        texts.push($(this).text());
                    });
                    $display.text(texts.join(', '));
                } else {
                    $display.text(selectedOptions.first().text());
                }
            },

            // 处理全选/全不选功能
            handleSelectAllNone: function ($container, $originalSelect, action) {
                var $options = $container.find('.custom-select-options');
                var selectAll = (action === 'select-all');
                var selectId = $originalSelect.attr('id');
                var isLocationSelect = (selectId === 'c-ocation_class');

                // 更新原始 select 元素（只对可选择的选项操作）
                $originalSelect.find('option').each(function () {
                    var $option = $(this);
                    var isSelectable = true;

                    if (isLocationSelect) {
                        isSelectable = Controller.api.isSelectableLocationOption($option, $option.text());
                    }

                    if (isSelectable) {
                        $option.prop('selected', selectAll);
                    }
                });

                // 更新自定义选项的显示状态（只对可选择的选项操作）
                $options.find('.custom-select-option').each(function () {
                    var $customOption = $(this);

                    if (!$customOption.hasClass('option-disabled')) {
                        if (selectAll) {
                            $customOption.addClass('selected');
                        } else {
                            $customOption.removeClass('selected');
                        }
                    }
                });

                // 更新显示文本
                Controller.api.updateCustomSelectDisplay($container, $originalSelect, true);

                // 触发 change 事件
                $originalSelect.trigger('change');

                console.log(action === 'select-all' ? '全选操作:' : '全不选操作:', $originalSelect.attr('id'));
            },

            // 判断地点选项是否可选择（仅班级层级可选）
            isSelectableLocationOption: function ($option, text) {
                var value = $option.val();
                var textContent = text.trim();

                // 首先检查是否为空值或无效值（分类通常没有有效的ID值）
                if (!value || value.trim() === '' || value === '0' || value === 'undefined' || value === 'null') {
                    return false;
                }

                // 检查是否为常见的分类名称（不管是否有value）
                var isCommonCategory = /^(地点|教学点|校区|楼层|建筑|区域|中心|分部|总部|本部)$/.test(textContent);
                if (isCommonCategory) {
                    return false;
                }

                // 检查文本缩进（下级选项通常有缩进）
                var hasIndentation = /^[\s\u00a0\u3000\u2003\u2002\u2009\u200a\u2006\u2005\u2004\u2007\u2008]{2,}/.test(text) ||
                    /^[─-╿▀-▟■-◿←-⇿]/.test(text) ||
                    /^[-—–·•◦▪▫●○]\s*/.test(text);

                // 检查是否包含班级关键词
                var hasClassKeywords = /班|组|室|号|教室|实验室|机房|会议室|办公室/.test(textContent);

                // 检查是否为短分类名称（通常分类名较短且不包含数字）
                var isShortCategory = textContent.length <= 6 && !/\d/.test(textContent) && !hasClassKeywords;

                // 更严格的判断逻辑：只有具体的教室/班级可选择
                // 根据您的数据结构，只有最底层的教室才应该可选

                // 检查是否为最底层的教室（通常包含数字和“教室”关键词）
                var isActualClassroom = /\d+教室|教室\d+|机房\d+|\d+号室|实验室\d+/.test(textContent);

                // 检查是否为中间层级（教学点、分部等）
                var isIntermediateLevel = /教学点|分部|中心|校区|大学/.test(textContent) && !/教室/.test(textContent);

                // 检查缩进深度（最底层通常有更多缩进）
                var indentLevel = (text.match(/[│├└─]/g) || []).length;
                var isDeepIndent = indentLevel >= 4; // 至少有4个缩进字符

                // 只有同时满足以下条件的才可选择：
                // 1. 是具体的教室（包含数字+教室）
                // 2. 或者有深层缩进且包含关键词且不是中间层级
                var isSelectable = isActualClassroom || (isDeepIndent && hasClassKeywords && !isIntermediateLevel);
                return isSelectable;
            },

            // 内容清理函数
            cleanContent: function (content) {
                if (!content) return '';

                // 如果是HTML内容，先处理HTML标签
                var isHtml = /<[^>]+>/.test(content);

                if (isHtml) {
                    // HTML内容处理
                    content = content
                        // 删除空的段落标签
                        .replace(/<p[^>]*>\s*<\/p>/gi, '')
                        // 删除空的div标签
                        .replace(/<div[^>]*>\s*<\/div>/gi, '')
                        // 处理段落开头的空格（保留两个全角空格）
                        .replace(/<(p|div)([^>]*)>\s+/gi, function (match, tag, attrs) {
                            var spaces = match.match(/\s+$/)[0];
                            // 如果是两个全角空格，保留
                            if (spaces === '　　') {
                                return '<' + tag + attrs + '>　　';
                            }
                            // 其他空格删除
                            return '<' + tag + attrs + '>';
                        })
                        // 删除多余的空行（连续的br标签）
                        .replace(/(<br[^>]*>\s*){2,}/gi, '<br>')
                        // 清理段落间的多余空行
                        .replace(/(<\/(p|div)>)\s*(<br[^>]*>\s*)+(<(p|div)[^>]*>)/gi, '$1$4');
                } else {
                    // 纯文本内容处理
                    content = content
                        // 删除空行（多个连续的换行符）
                        .replace(/\n\s*\n/g, '\n')
                        // 处理段落开头的空格（保留两个全角空格）
                        .replace(/^[ \t]+/gm, function (match) {
                            // 如果是两个全角空格，保留
                            if (match === '　　') {
                                return '　　';
                            }
                            // 其他空格删除
                            return '';
                        });
                }

                return content.trim();
            },

            // 初始化AI生成内容功能
            initAIContentGeneration: function () {
                // 绑定AI生成内容按钮事件
                $(document).on('click', '.ai-generate-content', Controller.api.handleAIContentGeneration);
            },

            // 页面加载时检查当前选中的栏目
            checkInitialColumn: function () {
                var $columnSelect = $('#c-column_id');
                var currentColumnId = $columnSelect.val();

                // 如果没有选中栏目，自动选第一个栏目
                if (!currentColumnId) {
                    if ($columnSelect.hasClass('selectpage')) {
                        $columnSelect.selectPageData && $columnSelect.selectPageData(function (data) {
                            if (data && data.length > 0) {
                                var first = data[0];
                                $columnSelect.val(first.id);
                                $columnSelect.attr('data-text', first.name);
                                $columnSelect.trigger('change');
                                $columnSelect.trigger('sp:select', {id: first.id, text: first.name});
                            }
                        });
                    } else {
                        var $first = $columnSelect.find('option').eq(0);
                        if ($first.length) {
                            $columnSelect.val($first.val());
                            $columnSelect.trigger('change');
                        }
                    }
                }

                setTimeout(function () {
                    var selectedText = '';

                    if ($columnSelect.hasClass('selectpage')) {
                        var $textInput = $columnSelect.siblings('input[type="text"]').first();
                        if ($textInput.length) {
                            selectedText = $textInput.val();
                        }
                        if (!selectedText) {
                            selectedText = $columnSelect.attr('data-text') || '';
                        }
                    } else {
                        selectedText = $columnSelect.find('option:selected').text();
                    }

                    var isTeacherColumn = selectedText && (
                        selectedText.indexOf('师资队伍') !== -1 ||
                        selectedText.indexOf('师资') !== -1 ||
                        selectedText.indexOf('教师') !== -1 ||
                        selectedText.indexOf('老师') !== -1
                    );

                    if (isTeacherColumn) {
                        $('#teacher-name-group').show();
                        $('#c-name').attr('data-rule', 'required');
                    } else {
                        $('#teacher-name-group').hide();
                        $('#c-name').attr('data-rule', '');
                        $('#c-name').val('');
                    }
                }, 1000);
            },

            // 处理AI内容生成
            handleAIContentGeneration: function () {
                var $btn = $(this);
                var inputId = $btn.data('input-id');
                var $editor = $('#' + inputId);

                // 收集表单信息
                var formData = Controller.api.collectFormData();
                if (!formData.title && !formData.keywords) {
                    Layer.msg('请先填写标题或其他基本信息', { icon: 2 });
                    return;
                }

                // 显示加载状态
                var originalText = $btn.html();
                $btn.html('<i class="fa fa-spinner fa-spin"></i> 生成提示词中...').prop('disabled', true);

                // 第一步：构建AI提示词
                var initialPrompt = Controller.api.buildContentPrompt(formData);
                // 第二步：使用提示词调用AI生成内容
                $btn.html('<i class="fa fa-spinner fa-spin"></i> AI生成内容中...');

                $.ajax({
                    url: Fast.api.fixurl('ai/generateText'),
                    type: 'POST',
                    data: {
                        prompt: initialPrompt,
                        type: 'article_content',
                        max_tokens: 2000
                    },
                    timeout: 120000, // 2分钟超时
                    success: function (response) {
                        if (response.code === 1 && response.data && response.data.content) {
                            var generatedContent = response.data.content;
                            // 设置内容到Summernote编辑器
                            Controller.api.setEditorContent($editor, generatedContent);

                            Layer.msg('AI内容生成成功！基于提示词生成了' + (response.data.tokens_used || '未知') + '字符的内容', { icon: 1, time: 3000 });
                        } else {
                            Layer.msg('AI内容生成失败：' + (response.msg || '未知错误'), { icon: 2, time: 5000 });
                        }
                    },
                    error: function (xhr, status, error) {
                        var errorMsg = 'AI内容生成失败';
                        if (xhr.status === 404) {
                            errorMsg += '：AI服务不可用';
                        } else if (xhr.status === 500) {
                            errorMsg += '：服务器错误';
                        } else if (status === 'timeout') {
                            errorMsg += '：请求超时，请稍后重试';
                        } else {
                            errorMsg += '：' + error;
                        }

                        Layer.msg(errorMsg, { icon: 2, time: 5000 });
                    },
                    complete: function () {
                        // 恢复按钮状态
                        $btn.html(originalText).prop('disabled', false);
                    }
                });
            },

            // 收集表单数据
            collectFormData: function () {
                var formData = {};

                // 收集所有文本输入框
                $('form[role=form] input[type=text], form[role=form] input[type=hidden]').each(function () {
                    var $this = $(this);
                    var name = $this.attr('name');
                    var value = $this.val();

                    if (name && value && !name.includes('token') && !name.includes('__')) {
                        var fieldName = name.replace(/row\[|\]/g, '');
                        formData[fieldName] = value;
                    }
                });

                // 收集所有textarea（除了编辑器本身）
                $('form[role=form] textarea').each(function () {
                    var $this = $(this);
                    var name = $this.attr('name');
                    var value = $this.val();
                    var id = $this.attr('id');

                    if (name && value && id !== 'editor-content') {
                        var fieldName = name.replace(/row\[|\]/g, '');
                        formData[fieldName] = value;
                    }
                });

                // 收集所有select下拉框（使用显示文本而不是值）
                $('form[role=form] select').each(function () {
                    var $this = $(this);
                    var name = $this.attr('name');
                    var text = $this.find('option:selected').text();

                    if (name && text && text.trim() !== '') {
                        var fieldName = name.replace(/row\[|\]/g, '');
                        formData[fieldName] = text.trim();
                    }
                });

                // 收集selectpage组件（FastAdmin特有组件）
                $('form[role=form] input.selectpage').each(function () {
                    var $this = $(this);
                    var name = $this.attr('name');
                    var value = $this.val();
                    var displayText = $this.data('display-text') || $this.attr('data-display-text');

                    // 尝试从selectpage的显示文本中获取
                    if (!displayText) {
                        // 查找相关的显示元素
                        var $display = $this.siblings('.selectpage-display');
                        if ($display.length > 0) {
                            displayText = $display.text();
                        } else {
                            // 如果没有找到显示文本，使用输入框的值
                            displayText = value;
                        }
                    }

                    if (name && displayText && displayText.trim() !== '') {
                        var fieldName = name.replace(/row\[|\]/g, '');
                        // 为selectpage字段添加特殊标识
                        formData[fieldName] = displayText.trim();
                        formData[fieldName + '_text'] = displayText.trim();
                    }
                });

                return formData;
            },

            // 构建内容生成提示词
            buildContentPrompt: function (formData) {
                var prompt = '# AI文章内容生成任务\n\n';
                prompt += '请根据以下信息生成一篇高质量的文章内容：\n\n';
                prompt += '## 基本信息\n';

                // 标题
                if (formData.title) {
                    prompt += '**文章标题：** ' + formData.title + '\n';
                }

                // 关键词
                if (formData.keywords) {
                    prompt += '**关键词：** ' + formData.keywords + '\n';
                }

                // 描述
                if (formData.description) {
                    prompt += '**文章描述：** ' + formData.description + '\n';
                }

                // 分类（使用select的text）
                if (formData.category_id) {
                    prompt += '**文章分类：** ' + formData.category_id + '\n';
                }

                // 其他字段（包括其他select的text值）
                var hasOtherFields = false;
                for (var key in formData) {
                    if (formData.hasOwnProperty(key) &&
                        !['title', 'keywords', 'description', 'category_id', 'content'].includes(key) &&
                        formData[key] && formData[key].trim() !== '') {
                        if (!hasOtherFields) {
                            prompt += '\n## 其他信息\n';
                            hasOtherFields = true;
                        }
                        prompt += '**' + key + '：** ' + formData[key] + '\n';
                    }
                }

                prompt += '\n## 生成要求\n';
                prompt += '1. **结构清晰**：包含引言、主体段落、结论\n';
                prompt += '2. **内容专业**：准确、有价值、有深度\n';
                prompt += '3. **字数适中**：800-1500字之间\n';
                prompt += '4. **格式规范**：使用HTML格式，包含适当的段落标签（<p>、<h3>、<h4>等）\n';
                prompt += '5. **高度相关**：内容必须与标题和关键词紧密相关\n';
                prompt += '6. **语言流畅**：通俗易懂，适合目标读者群体\n';
                prompt += '7. **逻辑严谨**：段落之间有清晰的逻辑关系\n\n';
                prompt += '## 输出要求\n';
                prompt += '请直接输出文章正文内容，不需要包含标题。内容应该是完整的HTML格式文本，可以直接用于富文本编辑器。';

                return prompt;
            },

            // 设置编辑器内容
            setEditorContent: function ($editor, content) {
                // 检查是否是Summernote编辑器
                if ($editor.hasClass('note-editable') || $editor.next('.note-editor').length > 0) {
                    // 使用Summernote的方法设置内容
                    $editor.summernote('code', content);
                } else {
                    // 如果还未初始化为Summernote，先设置原始值
                    $editor.val(content);

                    // 延迟设置，等待Summernote初始化完成
                    setTimeout(function () {
                        if ($editor.hasClass('note-editable') || $editor.next('.note-editor').length > 0) {
                            $editor.summernote('code', content);
                        }
                    }, 500);
                }
            },

            // 初始化抓取网址功能
            initCollectContent: function () {
                // 绑定智能粘贴事件
                $(document).on('paste', function (e) {
                    // 检查焦点是否在input或textarea上
                    var activeElement = document.activeElement;
                    var isInputFocused = activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA');

                    // 如果焦点在input或textarea上，不处理
                    if (isInputFocused) {
                        return;
                    }

                    // 获取粘贴的内容
                    var clipboardData = e.originalEvent.clipboardData || window.clipboardData;
                    if (clipboardData) {
                        var pastedText = clipboardData.getData('text/plain');

                        // 检查是否是以http开头的URL
                        if (pastedText && (pastedText.startsWith('http://') || pastedText.startsWith('https://'))) {
                            // 阻止默认粘贴行为
                            e.preventDefault();

                            // 填入抓取网址框
                            $('#c-s_url').val(pastedText.trim());

                            // 显示提示信息
                            Toastr.info('检测到URL，已自动填入抓取框并开始抓取...');

                            // 延迟触发抓取，让用户看到提示
                            setTimeout(function () {
                                $('#btn-collect').trigger('click');
                            }, 500);
                        }
                    }
                });

                // 绑定抓取按钮事件
                $(document).on('click', '#btn-collect', Controller.api.handleCollect);
            },

            // 处理抓取请求
            handleCollect: function () {
                var s_url = $('#c-s_url').val().trim();

                // 先尝试从剪贴板获取链接（无论输入框是否为空）
                Controller.api.tryGetClipboardUrl(function (clipboardUrl) {
                    if (clipboardUrl) {
                        // 如果剪贴板有URL且输入框为空，自动填入并抓取
                        $('#c-s_url').val(clipboardUrl);
                        Controller.api.performActualCollect(clipboardUrl);
                    } else if (s_url) {
                        // 如果输入框有内容，直接抓取
                        Controller.api.performActualCollect(s_url);
                    } else {
                        // 剪贴板没有有效URL且输入框为空，提示用户
                        Toastr.error('请输入要抓取的网址');
                        $('#c-s_url').focus();
                    }
                });
            },

            // 尝试从剪贴板获取URL
            tryGetClipboardUrl: function (callback) {
                // 优先使用现代 Clipboard API
                if (navigator.clipboard && navigator.clipboard.readText) {
                    navigator.clipboard.readText()
                        .then(function (text) {
                            var trimmedText = text.trim();
                            if (trimmedText && (trimmedText.startsWith('http://') || trimmedText.startsWith('https://'))) {
                                callback(trimmedText);
                            } else {
                                callback(null);
                            }
                        })
                        .catch(function (err) {
                            // 尝试使用传统方式
                            Controller.api.tryLegacyClipboardAccess(callback);
                        });
                } else {
                    Controller.api.tryLegacyClipboardAccess(callback);
                }
            },

            // 使用传统方式尝试访问剪贴板
            tryLegacyClipboardAccess: function (callback) {
                // 创建一个临时的文本框
                var textArea = document.createElement("textarea");
                textArea.style.position = 'fixed';
                textArea.style.top = '-9999px';
                document.body.appendChild(textArea);

                try {
                    // 聚焦文本框并执行粘贴命令
                    textArea.focus();
                    document.execCommand('paste');
                    var text = textArea.value.trim();

                    // 检查是否是URL
                    if (text && (text.startsWith('http://') || text.startsWith('https://'))) {
                        callback(text);
                    } else {
                        callback(null);
                    }
                } catch (err) {
                    callback(null);
                } finally {
                    // 清理临时文本框
                    document.body.removeChild(textArea);
                }
            },


            // 执行实际的抓取操作
            performActualCollect: function (s_url) {
                // 验证URL格式
                if (!Controller.api.isValidUrl(s_url)) {
                    Toastr.error('请输入正确的网址格式');
                    return;
                }

                // 显示加载状态
                var $btn = $('#btn-collect');
                var originalText = $btn.html();
                $btn.html('<i class="fa fa-spinner fa-spin"></i> 抓取中...').prop('disabled', true);

                // 使用JSONP方式发送请求
                debugger;
                Controller.api.jsonpRequest({
                    url: 'https://collect.longsunhd.com/collect/index.php',
                    data: {
                        s_url: encodeURIComponent(s_url),
                        gather_type: 1
                    },
                    success: function (data) {
                        if (data) {
                            // 填入标题（过滤空格）
                            if (data.subject) {
                                var cleanTitle = data.subject.replace(/\s+/g, ' ').trim();
                                $('#c-title').val(cleanTitle);
                            }
                            if (data.flash) {
                                // 处理flash字段，如果是数组取第一个元素
                                var flashValue = Array.isArray(data.flash) ? data.flash[0] : data.flash;
                                $('#c-video-edit').val(flashValue);
                                $('#c-video').val(flashValue);
                            }
                            if (data.thumb) {
                                // 处理thumb字段，如果是数组取第一个元素
                                var thumbValue = Array.isArray(data.thumb) ? data.thumb[0] : data.thumb;
                                $('#c-thumb-edit').val(thumbValue);
                                $('#c-thumb').val(thumbValue);
                            }
                            // 填入内容（过滤空行和段落头部空格）
                            if (data.message) {
                                // 内容过滤处理
                                var cleanContent = Controller.api.cleanContent(data.message);

                                // 如果使用的是Summernote富文本编辑器
                                if ($('#editor-content').length) {
                                    // 检查是否已初始化为Summernote
                                    if ($('#editor-content').hasClass('note-editable') || $('#editor-content').next('.note-editor').length > 0) {
                                        // 使用Summernote的正确方法设置内容
                                        $('#editor-content').summernote('code', cleanContent);
                                    } else {
                                        // 如果还未初始化，先设置原始值，等待初始化后再设置
                                        $('#editor-content').val(cleanContent);
                                        // 延迟设置，等待Summernote初始化完成
                                        setTimeout(function () {
                                            if ($('#editor-content').hasClass('note-editable') || $('#editor-content').next('.note-editor').length > 0) {
                                                $('#editor-content').summernote('code', cleanContent);
                                            }
                                        }, 500);
                                    }
                                } else if ($('#c-content').length) {
                                    // 其他普通文本框
                                    $('#c-content').val(cleanContent);
                                }
                            }

                            Toastr.success('抓取成功！');
                        } else {
                            Toastr.error('抓取失败，返回数据格式错误');
                        }
                    },
                    error: function (error) {
                        Toastr.error('抓取失败：' + error);
                    },
                    complete: function () {
                        // 恢复按钮状态
                        $btn.html(originalText).prop('disabled', false);
                    }
                });
            },

            // JSONP请求函数
            jsonpRequest: function (options) {
                var callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random());
                var script = document.createElement('script');
                var params = [];

                // 添加callback参数
                options.data.callback = callbackName;

                // 构建参数字符串
                for (var key in options.data) {
                    if (options.data.hasOwnProperty(key)) {
                        params.push(encodeURIComponent(key) + '=' + encodeURIComponent(options.data[key]));
                    }
                }

                // 设置全局回调函数
                window[callbackName] = function (data) {
                    try {
                        if (options.success) {
                            options.success(data);
                        }
                    } catch (e) {
                        if (options.error) {
                            options.error(e.message);
                        }
                    } finally {
                        // 清理
                        document.head.removeChild(script);
                        delete window[callbackName];
                        if (options.complete) {
                            options.complete();
                        }
                    }
                };

                // 设置超时处理
                var timeout = setTimeout(function () {
                    if (window[callbackName]) {
                        if (options.error) {
                            options.error('请求超时');
                        }
                        document.head.removeChild(script);
                        delete window[callbackName];
                        if (options.complete) {
                            options.complete();
                        }
                    }
                }, 30000); // 30秒超时

                // 设置script标签
                script.src = options.url + '?' + params.join('&');
                script.onerror = function () {
                    clearTimeout(timeout);
                    if (window[callbackName]) {
                        if (options.error) {
                            options.error('网络错误');
                        }
                        document.head.removeChild(script);
                        delete window[callbackName];
                        if (options.complete) {
                            options.complete();
                        }
                    }
                };

                // 添加到页面
                document.head.appendChild(script);
            },

            // URL格式验证函数
            isValidUrl: function (string) {
                try {
                    new URL(string);
                    return true;
                } catch (_) {
                    return false;
                }
            },
            formatter: {
                status: function (value, row, index) {
                    var checked = value == '1' ? 'checked' : '';
                    //var html = '<input type="checkbox" class="js-switch js-switch-status" data-size="small" data-id="' + row.id + '" ' + checked + ' />';
                    var html = '<a class="btn-change text-success" data-url="article/article/changeStatus" data-confirm="确认切换状态？" data-id="' + row.id + '"><i class="fa ' + (row.status === 0 ? 'fa-toggle-on fa-flip-horizontal text-gray' : 'fa-toggle-on') + ' fa-2x"></i></a>';

                    return html;
                }
            },
            events: {
                status: {
                    'change .js-switch-status': function (e) {
                        e.stopPropagation();
                        var that = this;
                        var id = $(this).data('id');
                        var status = $(this).prop('checked') ? 1 : 2;

                        Fast.api.ajax({
                            url: 'article/article/changestatus',
                            data: { id: id, status: status }
                        }, function (data, ret) {
                            Layer.msg(ret.msg);
                            // 刷新当前行
                            $("#table").bootstrapTable('updateRow', {
                                index: $(that).closest('tr').data('index'),
                                row: { status: status }
                            });
                        }, function (data, ret) {
                            Layer.msg(ret.msg);
                            // 恢复开关状态
                            $(that).prop('checked', !$(that).prop('checked'));
                        });
                        return false;
                    }
                }
            }
        }
    };


    // 初始化开关插件
    $(document).on('DOMNodeInserted', function (e) {
        if ($(e.target).find('.js-switch').length > 0 || $(e.target).hasClass('js-switch')) {
            $('.js-switch:not(.switchery)').each(function () {
                var switchery = new Switchery(this, {
                    size: 'small',
                    color: '#1AB394'
                });
            });
        }
    });

    return Controller;
});